package com.witsight.platform.util.tools;

import java.util.Collection;
import java.util.Map;

import org.springframework.util.Assert;

/**
 * 说明：PlatAssert异常处理验证工具类
 * @Title: sanyAssert.java
 * @Package com.gtx.utac.util
 * @See: 
 * Copyright: Copyright (c) 2014 
 * Company:sany team by product
 * @author: penght
 * @date: 2016年4月23日 上午11:47:33
 * @version: V1.0 update Release(文件修正记录)
 */
public class PlatAssert extends Assert {

	/**
	 * 说明：根据boolean表达式是否为真进行断言，不为真抛出异常
	 * @Title: isTrue
	 * @See:
	 * @author penght
	 * @param expression  布尔表达式
	 * @param message   如果断言失败抛出异常信息
	 * @throws IllegalArgumentException  if expression is false
	 * @date: 2016年4月27日 下午1:15:55
	 */
	public static void isTrue(boolean expression, String message) {
		String messageShow = "assert.validator.message.001";
		Assert.isTrue(expression, messageShow);
	}
	
	/** 
	 * 说明：根据boolean表达式是否为真进行断言，不为真抛出异常
	 * @Title: isTrue
	 * @See: 
	 * @author penght
	 * @param expression  表达式
	 * @date: 2016年11月16日 上午11:00:32
	 */
	public static void isTrue(boolean expression) {
		String messageShow = "assert.validator.message.001";
		Assert.isTrue(expression, messageShow);
	}
	
	/**
	 * 说明：根据object表达式是否为空进行断言，不为空抛出异常
	 * @Title: isNull
	 * @See:
	 * @author penght
	 * @param object  object对象
	 * @param message   如果断言失败抛出异常信息
	 * @throws IllegalArgumentException  if expression is not null
	 * @date: 2016年4月27日 下午1:38:40
	 */
	public static void isNull(Object object, String message) {
		String messageShow = "assert.validator.message.002";
		Assert.isNull(object, messageShow);
	}
	
	/** 
	 * 说明：根据object表达式是否为空进行断言，不为空抛出异常
	 * @Title: isNull
	 * @See: 
	 * @author penght
	 * @param object object对象
	 * @date: 2016年11月16日 上午11:18:59
	 */
	public static void isNull(Object object) {
		String messageShow = "assert.validator.message.002";
		Assert.isNull(object, messageShow);
	}

	/**
	 * 说明：根据object对象是否不为空进行断言，为空抛出异常
	 * @Title: notNull
	 * @See:
	 * @author penght
	 * @param object  object对象
	 * @param message   如果断言失败抛出异常信息
	 * @throws IllegalArgumentException   if expression is null
	 * @date: 2016年4月27日 下午1:40:48
	 */
	public static void notNull(Object object, String message) {
		String messageShow = "assert.validator.message.003";
		Assert.notNull(object, messageShow);
	}
	
	/** 
	 * 说明：根据object对象是否不为空进行断言，为空抛出异常
	 * @Title: notNull
	 * @See: 
	 * @author penght
	 * @param object  对象
	 * @date: 2016年11月16日 上午11:24:09
	 */
	public static void notNull(Object object) {
		String messageShow = "assert.validator.message.003";
		Assert.notNull(object, messageShow);
	}

	/**
	 * 说明：根据字符串内容是否为空/空值进行断言，为空或空值则抛出异常
	 * @Title: hasLength
	 * @See:
	 * @author penght
	 * @param text  检查字符串
	 * @param message   如果断言失败抛出异常信息
	 * @date: 2016年4月27日 下午1:44:48
	 */
	public static void hasLength(String text, String message) {
		String messageShow = "assert.validator.message.004";
		Assert.hasLength(text, messageShow);
	}
	/** 
	 * 说明：根据字符串内容是否为空/空值进行断言，为空或空值则抛出异常
	 * @Title: hasLength
	 * @See: this String argument must have length; it must not be null or empty
	 * @author penght
	 * @param text 检查字符串
	 * @date: 2016年11月16日 上午11:24:48
	 */
	public static void hasLength(String text) {
		String messageShow = "assert.validator.message.004";
		Assert.hasLength(text, messageShow);
	}

	/**
	 * 说明：断言给定字符串具有有效内容或必须至少包含一个非空格字符，无效内容/都是空格字符则抛出异常
	 * @Title: hasText
	 * @See:
	 * @author penght
	 * @param text    检查字符串
	 * @param message  如果断言失败抛出异常信息
	 * @date: 2016年4月27日 下午1:55:09
	 */
	public static void hasText(String text, String message) {
		String messageShow = "assert.validator.message.005";
		Assert.hasText(text, messageShow);
	}
	/** 
	 * 说明：断言给定字符串具有有效内容或必须至少包含一个非空格字符，无效内容/都是空格字符则抛出异常
	 * @Title: hasText
	 * @See: this String argument must have text; it must not be null, empty, or blank
	 * @author penght
	 * @param text 检查字符串
	 * @date: 2016年11月16日 上午11:27:33
	 */
	public static void hasText(String text) {
		String messageShow = "assert.validator.message.005";
		Assert.hasText(text, messageShow);
	}

	/**
	 * 说明：根据给定的文本不包含指定的子字符串进行断言，包含则抛出异常
	 * @Title: doesNotContain
	 * @See:
	 * @author penght
	 * @param textToSearch   要搜索文本字符串
	 * @param substring    指定的文本子字符串
	 * @param message   如果断言失败抛出异常信息
	 * @date: 2016年4月27日 下午2:01:49
	 */
	public static void doesNotContain(String textToSearch, String substring, String message) {
		String messageShow = "assert.validator.message.006";
		Assert.doesNotContain(textToSearch, substring, messageShow);
	}
	/** 
	 * 说明：根据给定的文本不包含指定的子字符串进行断言，包含则抛出异常
	 * @Title: doesNotContain
	 * @See: this String argument must not contain the substring
	 * @author penght
	 * @param textToSearch  要搜索文本字符串
	 * @param substring 指定的文本子字符串
	 * @date: 2016年11月16日 上午11:32:11
	 */
	public static void doesNotContain(String textToSearch, String substring) {
		String messageShow = "assert.validator.message.006";
		Assert.doesNotContain(textToSearch, substring, messageShow);
	}

	/**
	 * 说明：根据数组是否为空或者数组长度为0进行断言，满足前者之一则发生异常。
	 * @Title: notEmpty
	 * @See:
	 * @author penght
	 * @param array     检查的数组
	 * @param message  如果断言失败抛出异常信息
	 * @throws IllegalArgumentException if the object array is null or has no elements
	 * @date: 2016年4月27日 下午2:11:14
	 */
	public static void notEmpty(Object[] array, String message) {
		String messageShow = "assert.validator.message.007";
		Assert.notEmpty(array, messageShow);
	}
	/** 
	 * 说明：根据数组是否为空或者数组长度为0进行断言，满足前者之一则发生异常。
	 * @Title: notEmpty
	 * @See: this array must not be empty: it must contain at least 1 element
	 * @author penght
	 * @param array 集合
	 * @date: 2016年11月16日 上午11:34:59
	 */
	public static void notEmpty(Object[] array) {
		String messageShow = "assert.validator.message.007";
		Assert.notEmpty(array, messageShow);
	}

	/**
	 * 说明：根据数组是否包含null对象进行断言，满足则发生异常
	 * @Title: noNullElements
	 * @See:
	 * @author penght
	 * @param array  检查数组
	 * @param message   如果断言失败抛出异常信息
	 * @throws IllegalArgumentException    if the object array contains a null element
	 * @date: 2016年4月27日 下午2:16:54
	 */
	public static void noNullElements(Object[] array, String message) {
		String messageShow = "assert.validator.message.008";
		Assert.noNullElements(array, messageShow);
	}
	/** 
	 * 说明：根据数组是否包含null对象进行断言，满足则发生异常
	 * @Title: noNullElements
	 * @See: this array must not contain any null elements
	 * @author penght
	 * @param array 集合
	 * @date: 2016年11月16日 上午11:37:46
	 */
	public static void noNullElements(Object[] array) {
		String messageShow = "assert.validator.message.008";
		Assert.noNullElements(array, messageShow);
	}

	/**
	 * 说明：根据集合类型不为空或者至少有一个元素进行断言，不满足则抛出异常
	 * @Title: notEmpty
	 * @See:
	 * @author penght
	 * @param collection   检查集合
	 * @param message   如果断言失败抛出异常信息
	 * @throws IllegalArgumentException   if the collection is code null or has no elements
	 * @date: 2016年4月27日 下午2:21:31
	 */
	public static void notEmpty(Collection<?> collection, String message) {
		String messageShow = "assert.validator.message.009";
		Assert.notEmpty(collection, messageShow);
	}
	/** 
	 * 说明：根据集合类型不为空或者至少有一个元素进行断言，不满足则抛出异常
	 * @Title: notEmpty
	 * @See: this collection must not be empty: it must contain at least 1 element
	 * @author penght
	 * @param collection  检查集合
	 * @date: 2016年11月16日 上午11:40:25
	 */
	public static void notEmpty(Collection<?> collection) {
		String messageShow = "assert.validator.message.009";
		Assert.notEmpty(collection, messageShow);
	}

	/**
	 * 说明：根据视图条目不为空或至少有一个条目进行断言，不满足则抛出异常
	 * @Title: notEmpty
	 * @See:
	 * @author penght
	 * @param map    检查视图
	 * @param message      如果断言失败抛出异常信息
	 * @throws IllegalArgumentException    if the map is null or has no entries
	 * @date: 2016年4月27日 下午2:25:16
	 */
	public static void notEmpty(Map<?, ?> map, String message) {
		String messageShow = "assert.validator.message.010";
		Assert.notEmpty(map, messageShow);
	}
	/** 
	 * 说明：根据视图条目不为空或至少有一个条目进行断言，不满足则抛出异常
	 * @Title: notEmpty
	 * @See: this map must not be empty; it must contain at least one entry
	 * @author penght
	 * @param map  检查视图
	 * @date: 2016年11月16日 上午11:41:23
	 */
	public static void notEmpty(Map<?, ?> map) {
		String messageShow = "assert.validator.message.010";
		Assert.notEmpty(map, messageShow);
	}

	/**
	 * 说明：根据类型是否所属于指定类型进行断言，不是则发生异常
	 * @Title: isInstanceOf
	 * @See:
	 * @author penght
	 * @param type   类型检查
	 * @param obj    提供的对象
	 * @param message  如果断言失败抛出异常信息
	 * @throws IllegalArgumentException  if the object is not an instance of class
	 * @date: 2016年4月27日 下午2:30:36
	 */
	public static void isInstanceOf(Class<?> type, Object obj, String message) {
		notNull(type, "Type to check against must not be null");
		String messageShow = "assert.validator.message.011";
		Assert.isInstanceOf(type, obj, messageShow);
	}
	/** 
	 * 说明：根据类型是否所属于指定类型进行断言，不是则发生异常
	 * @Title: isInstanceOf
	 * @See:
	 * @author penght
	 * @param type 类型
	 * @param obj 对象
	 * @date: 2016年11月16日 上午11:44:56
	 */
	public static void isInstanceOf(Class<?> type, Object obj) {
		notNull(type, "Type to check against must not be null");
		String messageShow = "assert.validator.message.011";
		Assert.isInstanceOf(type, obj, messageShow);
	}

	/**
	 * 说明：根据子类必须按照类型匹配于父类进行断言，不满足则抛出异常
	 * @Title: isAssignable
	 * @See:
	 * @author penght
	 * @param superType   检查父类
	 * @param subType  检查子类
	 * @param message   如果断言失败抛出异常信息
	 * @throws IllegalArgumentException   if the classes are not assignable
	 * @date: 2016年4月27日 下午2:34:52
	 */
	public static void isAssignable(Class<?> superType, Class<?> subType, String message) {
		String messageShow = "assert.validator.message.012";
		Assert.isAssignable(superType, subType, messageShow);
	}
	/** 
	 * 说明：根据子类必须按照类型匹配于父类进行断言，不满足则抛出异常
	 * @Title: isAssignable
	 * @See: 
	 * @author penght
	 * @param superType 检查父类
	 * @param subType   检查子类
	 * @date: 2016年11月16日 上午11:46:23
	 */
	public static void isAssignable(Class<?> superType, Class<?> subType) {
		String messageShow = "assert.validator.message.012";
		Assert.isAssignable(superType, subType, messageShow);
	}

	/**
	 * 说明：指定boolean类型的表达式为真，进行断言
	 * @Title: state
	 * @See:
	 * @author penght
	 * @param expression   boolean表达式
	 * @param message    如果断言失败抛出异常信息
	 * @throws IllegalStateException    if expression is false
	 * @date: 2016年4月27日 下午2:43:03
	 */
	public static void state(boolean expression, String message) {
		String messageShow = "assert.validator.message.013";
		Assert.state(expression, messageShow);
	}
	
	/** 
	 * 说明：指定boolean类型的表达式为真，进行断言
	 * @Title: state
	 * @See: this state invariant must be true
	 * @author penght
	 * @param expression 表达式
	 * @date: 2016年11月16日 上午11:48:08
	 */
	public static void state(boolean expression) {
		String messageShow = "assert.validator.message.013";
		Assert.state(expression, messageShow);
	}
}
